home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / qlib205.zip / QLIB.ZIP / SRC / QLIB / MEM.ASM < prev    next >
Assembly Source File  |  1997-01-09  |  2KB  |  153 lines

  1. include qlib.inc  ;setup
  2. include dos.inc
  3. include string.inc
  4.  
  5. .code
  6.  
  7. ;this can handle overlaps! (but the src is destoyed of course)
  8. memcpy proc uses edi esi ecx,dest:dword,src:dword,len:dword
  9.   pushad
  10.   .if !len
  11.     popad
  12.     mov eax,dest
  13.     ret
  14.   .endif
  15.   mov esi,src
  16.   mov edi,dest
  17.   mov ecx,len
  18.   .if esi<edi
  19.     ;copy backwards
  20.     std
  21.     add esi,ecx
  22.     add edi,ecx
  23.     dec esi   ; FIX : Ver 1.1
  24.     dec edi   ;  "
  25.   .endif
  26.   rep movsb
  27.   cld
  28.   popad
  29.   mov eax,dest
  30.   ret
  31. memcpy endp
  32.  
  33. memcmp proc uses esi edi ecx,p1:dword,p2:dword,len:dword
  34.   pushad
  35.   mov esi,p1
  36.   mov edi,p2
  37.   mov ecx,len
  38. @@:
  39.   repz cmpsb
  40.   ja above
  41.   jb below
  42.   popad
  43.   xor eax,eax
  44.   ret
  45. above:
  46.   popad
  47.   mov eax,1
  48.   ret
  49. below:
  50.   popad
  51.   mov eax,-1
  52.   ret
  53. memcmp endp
  54.  
  55. memset proc uses ecx edi,p:dword,val:byte,len:dword
  56.   mov ecx,len
  57.   mov edi,p
  58.   mov al,val
  59.   rep stosb
  60.   mov eax,p
  61.   ret  
  62. memset endp
  63.  
  64. ;same as memset except args order
  65. setmem proc uses ecx edi,p:dword,len:dword,val:byte
  66.   mov ecx,len
  67.   mov edi,p
  68.   mov al,val
  69.   rep stosb
  70.   mov eax,p
  71.   ret
  72. setmem endp
  73.  
  74. memchr proc uses ecx edi,s1:dword,c1:byte,len:dword
  75.   mov ecx,len
  76.   mov edi,s1
  77.   mov al,c1
  78.   repnz scasb
  79.   ja above
  80.   jb below
  81.   xor eax,eax
  82.   ret
  83. above:
  84.   mov eax,1
  85.   ret
  86. below:
  87.   mov eax,-1
  88.   ret
  89. memchr endp
  90.  
  91. memccpy proc,d1:dword,s1:dword,c1:byte,len:dword
  92.   pushad
  93.   callp strlen,s1
  94.   mov edi,s1
  95.   mov ecx,eax
  96.   mov ebx,eax
  97.   mov al,c1
  98.   repnz scasb
  99.   .if !zero?
  100.     mov ecx,len
  101.     mov dptr[esp+7*4],0  ;return NULL
  102.     jmp @f
  103.   .endif
  104.   sub ebx,ecx
  105.   mov ecx,ebx
  106.   mov eax,d1
  107.   add eax,ecx
  108.   mov [esp+7*4],eax
  109. @@:
  110.   mov esi,s1
  111.   mov edi,d1
  112.   rep movsb
  113.   popad
  114.   ret
  115. memccpy endp
  116.  
  117. memicmp proc uses esi edi ecx,p1:dword,p2:dword,len:dword
  118.   pushad
  119.   mov esi,p1
  120.   mov edi,p2
  121.   mov ecx,len
  122. @@:
  123.   lodsb
  124.   .if (al>='a') && (al<='z')
  125.     add al,'A'-'a'
  126.   .endif
  127.   mov bl,al
  128.   mov al,[edi]
  129.   inc edi
  130.   .if (al>='a') && (al<='z')
  131.     add al,'A'-'a'
  132.   .endif
  133.   cmp bl,al
  134.   ja above
  135.   jb below
  136.   dec ecx
  137.   jnz @b
  138.   popad
  139.   xor eax,eax
  140.   ret
  141. above:
  142.   popad
  143.   mov eax,1
  144.   ret
  145. below:
  146.   popad
  147.   mov eax,-1
  148.   ret
  149. memicmp endp
  150.  
  151. end
  152.  
  153.